package Sonido;

import java.io.IOException;
import java.io.InputStream;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;

/**
 * Esta clase se encarga de crear y reproducir los efectos de sonido que tendra
 * el juego a lo largo de la carrera
 *
 * Equipo: The Dream Team
 * @author Arturo Ramires Morales
 * @author José Francisco Ruiz Martínez
 * @author José Héctor Bermúdez Robles
 * @version 1.0  Noviembre 2010
 */

public class Sonido {

    private boolean reproduciendo;
    private Player musicPlayer;
    private InputStream tipoSonido;

    /**
     * Constructor, selecciona una canción segun el índice de selección.
     * @param archivo Nombre del archivo de sonido que se crea para poder reproducirse
     */
    public Sonido(String archivo) {

        reproduciendo = false;

        try {
            InputStream tipoSonido = getClass().getResourceAsStream(archivo);
            if (archivo.equalsIgnoreCase("jump.wav")) {
                musicPlayer = Manager.createPlayer(tipoSonido, "audio/x-wav");
            } else {
                musicPlayer = Manager.createPlayer(tipoSonido, "audio/mpeg");
            }
        } catch (IOException ioe) {
            System.out.println("IO exception error");
        } catch (MediaException me) {
            System.out.println("Media exception error at constructor");
        }
    }

    /**
     * Inicia al reproductor de música
     */
    public void iniciarReproductor() {
        try {
            musicPlayer.realize();
            musicPlayer.prefetch();
            musicPlayer.start();
        } catch (MediaException ex) {
            System.out.println("Media exception error at startMusicPlayer");
        }
        reproduciendo = true;
    }

    /**
     * Interrumpe el reproductor de música
     */
    public void pararSonido() {
        try {
            musicPlayer.stop();
        } catch (MediaException ex) {
            System.out.println("Media exception error at stopMusicPlayer");
        }
        reproduciendo = false;
    }

    /**
     * Destruye y finaliza el reproductor de música
     */
    public void terminate() {
        musicPlayer.deallocate();
        musicPlayer = null;
    }

    /**
     *Regresa el estado del reproductor de música
     * @return el estado de reproducción de música
     */
    public boolean Reproduciendo() {
        return reproduciendo;
    }
}
